Crate document_features
source ·Expand description
Document your crate’s feature flags.
This crates provides a macro that extracts “documentation” comments from Cargo.toml
To use this crate, add #![doc = document_features::document_features!()]
in your crate documentation.
The document_features!()
macro reads your Cargo.toml
file, extracts feature comments and generates
a markdown string for your documentation.
Basic example:
//! Normal crate documentation goes here.
//!
//! ## Feature flags
#![doc = document_features::document_features!()]
// rest of the crate goes here.
§Documentation format:
The documentation of your crate features goes into Cargo.toml
, where they are defined.
The document_features!()
macro analyzes the contents of Cargo.toml
.
Similar to Rust’s documentation comments ///
and //!
, the macro understands
comments that start with ##
and #!
. Note the required trailing space.
Lines starting with ###
will not be understood as doc comment.
##
comments are meant to be above the feature they document.
There can be several ##
comments, but they must always be followed by a
feature name or an optional dependency.
There should not be #!
comments between the comment and the feature they document.
#!
comments are not associated with a particular feature, and will be printed
in where they occur. Use them to group features, for example.
§Examples:
This contents in Cargo.toml:
[package]
name = "..."
# ...
[features]
default = ["foo"]
#! This comments goes on top
## The foo feature enables the `foo` functions
foo = []
## The bar feature enables the bar module
bar = []
#! ### Experimental features
#! The following features are experimental
## Enable the fusion reactor
##
## ⚠️ Can lead to explosions
fusion = []
[dependencies]
document-features = "0.2"
#! ### Optional dependencies
## Enable this feature to implement the trait for the types from the genial crate
genial = { version = "0.2", optional = true }
## This awesome dependency is specified in its own table
[dependencies.awesome]
version = "1.3.5"
optional = true
Generates the following:
Preview |
---|
This comments goes on top
§Experimental featuresThe following features are experimental
§Optional dependencies
|
§Customization
You can customize the formatting of the features in the generated documentation by setting
the key feature_label=
to a given format string. This format string must be either
a string literal or
a raw string literal.
Every occurrence of {feature}
inside the format string will be substituted with the name of the feature.
For instance, to emulate the HTML formatting used by rustdoc
one can use the following:
#![doc = document_features::document_features!(feature_label = r#"<span class="stab portability"><code>{feature}</code></span>"#)]
The default formatting is equivalent to:
#![doc = document_features::document_features!(feature_label = "**`{feature}`**")]
§Compatibility
The minimum Rust version required to use this crate is Rust 1.54 because of the
feature to have macro in doc comments. You can make this crate optional and use
#[cfg_attr()]
statements to enable it only when building the documentation:
You need to have two levels of cfg_attr
because Rust < 1.54 doesn’t parse the attribute
otherwise.
#![cfg_attr(
feature = "document-features",
cfg_attr(doc, doc = ::document_features::document_features!())
)]
In your Cargo.toml, enable this feature while generating the documentation on docs.rs:
[dependencies]
document-features = { version = "0.2", optional = true }
[package.metadata.docs.rs]
features = ["document-features"]
## Alternative: enable all features so they are all documented
## all-features = true
Macros§
- Produce a literal string containing documentation extracted from Cargo.toml